Поток (файл) создается в хранилище с помощью функции CreateStream(), естественно при этом хранилище должно быть открыто:
HRESULT CreateStream ( const WCHAR *pwcsName, //указатель на имя потока DWORD grfMode, //режим доступа DWORD reserved1, //зарезервировано 0 DWORD reserved2, //зарезервировано 0 IStream **ppstm //указатель на новый объект );
Кодов возврата может быть много, главный S_OK, который прямо говорит - все окей. Смотрим пример:
#include "stdafx.h"
#include "windows.h"
#include "ole2.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
OLECHAR filename[20];
wcscpy(filename,L"test.stg");
LPSTORAGE pIStorage=NULL;
HRESULT rez;
rez=StgOpenStorage(filename,NULL, STGM_READWRITE |
STGM_SHARE_EXCLUSIVE ,NULL,0,&pIStorage);
if (!FAILED(rez))
{
cout << "Ok open" << endl;
LPSTREAM stream = NULL;
HRESULT hresult = pIStorage->CreateStream(L"MyFile",STGM_READWRITE|
STGM_SHARE_EXCLUSIVE|STGM_CREATE,0, 0, &stream);
stream->Release();
pIStorage->Release();
}
else
cout << "Error open" << endl;
return 0;
}
Если теперь просмотреть наше хранилище в DocFile View, то том можно увидеть наш файл.

Обратите внимание на то, что в свойствах открываемого хранилища использован флаг STGM_READWRITE. Точно так же без проблем записывается файл и в Excel.

И этот файл потом открывается. Вот Вам пример как и куда записать вирус. Кстати сюда можно и записывать информацию со сведениями о том, кто создал файл и кому он принадлежит.